﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Kaskelot.Web.Services;
using Kaskelot.Web.UserControls.FormControls;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using umbraco.cms.businesslogic.member;
using umbraco.NodeFactory;

namespace Kaskelot.Web.UserControls
{
	public partial class BlankettRenderer : System.Web.UI.UserControl
	{
        public string BlankettNamn { get; set; }
		protected void Page_Load(object sender, EventArgs e)
		{
			Node currentNode = Node.GetCurrent();
			string blankettName = currentNode.GetProperty("nameOfForm").Value;

			if (string.IsNullOrEmpty(blankettName))
			{
				lblError.Text = "Den här sidan försökte ladda in en blankett men inget blankettnamn har angivits!";
				lblError.Visible = true;
				pnBlankettContainer.Visible = false;
				return;
			}

			using (WebService svc = new WebService())
			{
				Blankett blankett = svc.GetBlankettByName(blankettName);

				if (blankett == null)
				{
					lblError.Text = "Den här sidan försökte ladda in en blankett men ingen blankett kunde hittas med namnet '" + blankettName + "'!";
					lblError.Visible = true;
					pnBlankettContainer.Visible = false;
					return;
				}

				pnBlankettContainer.Attributes.Add("data-blankettId", blankett.Id.ToString());
				litBlankettNamn.Text = blankett.Namn;
                this.BlankettNamn = blankett.Namn;

				Falt[] faltInBlankett = svc.GetFaltForBlankett(blankett.Id);
				rpFalt.DataSource = faltInBlankett;
				rpFalt.DataBind();
			}
		}

		protected void rpBlankettFalt_ItemDataBound(object sender, RepeaterItemEventArgs e)
		{
			try
			{
				if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
				{
					Falt falt = (Falt)e.Item.DataItem;

					string basePath = "~/usercontrols/FormControls/";
					FormControl ctrl = LoadControl(basePath + UserControlForTyp(falt.Typ)) as FormControl;
					ctrl.Falt = falt;

					PlaceHolder phFalt = e.Item.FindControl("phFalt") as PlaceHolder;
					phFalt.Controls.Add(ctrl);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		private static string UserControlForTyp(FaltTyp typ)
		{
			switch (typ)
			{
				case FaltTyp.Flerval:
					return "Flerval.ascx";
				case FaltTyp.Datum:
					return "Datum.ascx";
				case FaltTyp.Enkelval:
					return "Enkelval.ascx";
				case FaltTyp.Textrad:
					return "Textrad.ascx";
				case FaltTyp.Textyta:
					return "Textyta.ascx";
				case FaltTyp.Personnummer:
					return "Personnummer.ascx";
				case FaltTyp.Epostadress:
					return "Mailadress.ascx";
				case FaltTyp.Postnummer:
					return "Postnummer.ascx";
				default:
					return string.Empty;
			}
		}
	}
}